Быстрое создание классов‑данных в Python через @dataclass
Источник: https://t.me/Python_libr/3464
Краткое содержание
Короткий обучающий пост канала Python Libr про декоратор @dataclass из стандартного модуля dataclasses. Декоратор автоматически генерирует методы __init__, __eq__, __repr__ (в посте упомянуто __str__), __hash__ и ряд других на основе аннотаций типов, объявленных в теле класса. Это позволяет описывать «контейнеры данных» минимумом кода. Подчёркивается, что поля без аннотации типа игнорируются — только аннотированные атрибуты попадают в сгенерированный конструктор.
Иллюстрация
Минимальный пример: класс‑контейнер для координаты с автоматически собранным __init__ и читаемым __repr__:
from dataclasses import dataclass
@dataclass
class Point:
x: float
y: float
label: str = "origin" # значение по умолчанию
p = Point(1.0, 2.0)
print(p) # Point(x=1.0, y=2.0, label='origin')
print(p == Point(1.0, 2.0)) # True — __eq__ сгенерирован автоматически
# Поле без аннотации типа НЕ становится полем dataclass:
@dataclass
class Bad:
x: int
y = 0 # пропускается генератором, останется обычным атрибутом класса
Полезные опции декоратора, не упомянутые в посте, но обычно сопутствующие теме: frozen=True делает экземпляры неизменяемыми и пригодными в качестве ключей словарей/элементов множеств; kw_only=True (Python 3.10+) запрещает позиционную инициализацию; field(default_factory=list) корректно задаёт изменяемые значения по умолчанию.
Значимость
Заметка — короткий учебный «карточный» пост (#урок) о повседневном инструменте стандартной библиотеки. Это типовой материал канала: разбор отдельной фичи без претензии на полноту. Полезен новичкам как точка входа в dataclasses; для практической работы стоит дочитать официальную документацию модуля, ссылку на которую канал даёт в исходном посте.
🧾 Транскрипт (формат)
📌 Быстро создаём классы с данными
Источник: https://t.me/Python_libr/3464
📌 Быстро создаём классы с данными
Декоратор @dataclass из модуля dataclasses автоматизирует создание методов __init__, __eq__, __str__, __hash__ и других на основе типов, которые переданы в начале.
Таким образом мы можем быстро создавать объекты с каким-то набором данных, при этом написав минимум кода.
Также стоит отметить, что все значения должны иметь тип, иначе они будут проигнорированы.
📕 Документация
#урок